package top.yueyazhui.dds.datasource;

import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
import org.springframework.stereotype.Component;

import javax.sql.DataSource;
import java.util.HashMap;
import java.util.Map;

@Component
public class DynamicDataSource extends AbstractRoutingDataSource {

    public DynamicDataSource(LoadDataSource loadDataSource) {
        // 1、设置所有的数据源
        Map<String, DataSource> allDataSource = loadDataSource.loadAllDataSource();
        super.setTargetDataSources(new HashMap<>(allDataSource));
        // 2、设置默认的数据源
        // 并不是所有的方法上都有 @DataSource 注解，对于那些没有 @DataSource 注解的方法，该使用哪个数据源
        super.setDefaultTargetDataSource(allDataSource.get(DataSourceType.DEFAULT_DATA_SOURCE_NAME));
        // 3、super.afterPropertiesSet();
        super.afterPropertiesSet();
    }

    /**
     * 这个方法用来返回数据源名称，当系统获取数据源时，会自动调用该方法获取数据源的名称
     * @return
     */
    @Override
    protected Object determineCurrentLookupKey() {
        return DynamicDataSourceContextHolder.getDataSource();
    }
}
